import common.TreeNode;

/**
 * @author tmh
 * @date 2024/10/6 21:04
 * @description
 */
public class T98验证二叉搜索树 {
    //使用中序遍历，借助外部遍历实现
    private boolean isValid = true;
    private TreeNode pre = null;

    public boolean isValidBST(TreeNode root) {
        dfs(root);
        return isValid;
    }

    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        //往左面遍历
        dfs(root.left);
        //中的逻辑：当遍历到最左面节点的时候进行处理
        if (pre != null && pre.val>= root.val){
            isValid=false;
            return;
        }
        //最左边的节点其实是不做任何处理的，当我们倒数第一个节点遍历完了之后，要用pre来保存这个节点
        pre=root;
        //往右面遍历
        dfs(root.right);
    }
}
